home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Utilities / Unix / MOTD / Source / DefaultsTable.m < prev    next >
Text File  |  1995-06-12  |  3KB  |  114 lines

  1. #import "DefaultsTable.h"
  2.  
  3. #import <stdlib.h>
  4.  
  5. #define intDefaultFormat "%d"
  6. #define pointDefaultFormat "x:%f y:%f"
  7. #define colorDefaultFormat "r:%f g:%f b:%f a:%f"
  8.  
  9. #define convertToColor NXConvertRGBAToColor
  10. #define convertFromColor NXConvertColorToRGBA
  11.  
  12. int writeIntDefault(const char *name, int value)
  13. {
  14.     char string[BUFSIZ];
  15.     
  16.     (void) sprintf(string, intDefaultFormat, value);
  17.     
  18.     return writeDefault(name, string);
  19. }
  20.  
  21. int writePointDefault(const char *name, NXPoint point)
  22. {
  23.     char string[BUFSIZ];
  24.     
  25.     (void) sprintf(string, pointDefaultFormat, point.x, point.y);
  26.     
  27.     return writeDefault(name, string);
  28. }
  29.  
  30. NXPoint getPointDefault(const char *name)
  31. {
  32.     NXPoint point;
  33.     const char *string = getStringDefault(name);
  34.     
  35.     (void) sscanf(string, pointDefaultFormat, &point.x, &point.y);
  36.  
  37.     return point;
  38. }
  39.  
  40. int writeColorDefault(const char *name, NXColor color)
  41. {
  42.     char string[BUFSIZ];
  43.     float primaries[3], alpha;
  44.     
  45.     convertFromColor(color, &(primaries[0]), &(primaries[1]), &(primaries[2]), &alpha);
  46.     
  47.     (void) sprintf(string, colorDefaultFormat, primaries[0], primaries[1], primaries[2], alpha);
  48.     
  49.     return writeDefault(name, string);
  50. }
  51.  
  52. NXColor getColorDefault(const char *name)
  53. {
  54.     float primaries[3], alpha;
  55.     const char *string = getStringDefault(name);
  56.     
  57.     (void) sscanf(string, colorDefaultFormat, &(primaries[0]), &(primaries[1]), &(primaries[2]), &alpha);
  58.  
  59.     return convertToColor(primaries[0], primaries[1], primaries[2], alpha);
  60. }
  61.  
  62. @implementation DefaultsTable : NXStringTable
  63.  
  64. - initFromFile:(const char *) file
  65. {
  66.     return [[self init] readFromFile:file];
  67. }
  68.  
  69. - registerDefaults:(const char *) owner
  70. {
  71.         if(![self applyToDefaults:owner function:NXRegisterDefaults]) return nil;
  72.  
  73.         return self;
  74. }
  75.  
  76. - writeDefaults:(const char *) owner
  77. {
  78.         if(![self applyToDefaults:owner function:(int (*)(const char *, const NXDefaultsVector)) NXWriteDefaults]) return nil;
  79.  
  80.         return self;
  81. }
  82.  
  83. - updateDefaults
  84. {
  85.         NXUpdateDefaults();
  86.  
  87.         return self;
  88. }
  89.  
  90. - (int) applyToDefaults:(const char *) owner function:(int (*)(const char *, const NXDefaultsVector)) routine
  91. {
  92.         int i, status;
  93.         const void *key, *value;
  94.         struct _NXDefault *vector;
  95.         NXHashState state = [self initState];
  96.  
  97.         if((vector = (struct _NXDefault *) calloc((size_t) ([self count] + 1), sizeof(struct _NXDefault))) == NULL) perror("calloc");
  98.  
  99.         for(i = 0; [self nextState:&state key:&key value:&value]; i++) {
  100.                  vector[i].name = (char *) key;
  101.                  vector[i].value = (char *) value;
  102.                  }
  103.  
  104.         vector[i].name = vector[i].value = NULL;
  105.  
  106.         status = (*routine)(owner, vector);
  107.  
  108.         cfree(vector);
  109.  
  110.         return status;
  111. }
  112.  
  113. @end
  114.